package grafica;


import elementi.Bomba;
import elementi.Elemento;
import elementi.Energia;
import elementi.Gadget;
import elementi.Muro;
import elementi.Scudo;
import elementi.dardi.Dardo;
import elementi.giocatori.Giocatore;
import forme.Cerchio;
import forme.Quadrato;
import gioco.Arena;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.util.Iterator;
import java.util.LinkedList;

import javax.swing.JPanel;



public class GraficaSemplice extends JPanel implements Grafica {
	private static final long serialVersionUID = 1L;
	
	private Graphics g;
	private Arena arena;
	private LinkedList <Elemento> elementi;
	

	
	
	
	public GraficaSemplice(Arena arena){
		this.arena = arena;
		this.elementi = arena.getElementi();
		setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
		
		
	}
	
	@Override
	public void disegnaMuro(Muro muro){
		
		Quadrato q = (Quadrato) muro.getForma();
		int latoMuro = q.getLato();
		g.setColor(muro.getForma().getColore());
		g.fillRect(Math.round(muro.getX()-latoMuro/2),Math.round( muro.getY()-latoMuro/2), latoMuro, latoMuro);
		
	}
	@Override
	public void disegnaGiocatore(Giocatore giocatore){
		
		Cerchio c = (Cerchio) giocatore.getForma();
		g.setColor(giocatore.getForma().getColore());
		double xDraw =giocatore.getX() +c.getRaggio()*giocatore.getCoseno();
		double yDraw =giocatore.getY() +c.getRaggio()*giocatore.getSeno();	
		g.fillOval(Math.round(giocatore.getX()-c.getRaggio()),Math.round(giocatore.getY()-c.getRaggio()),Math.round(2*c.getRaggio()),Math.round(2*c.getRaggio()));
		g.setColor(Color.RED);
		g.fillOval((int)xDraw-2,(int)yDraw-2 , 5, 5);
		g.setColor(Color.BLACK);
		g.drawLine(Math.round(giocatore.getX()-c.getRaggio()-10), Math.round(giocatore.getY()-c.getRaggio()), Math.round(giocatore.getX()-c.getRaggio()), Math.round(giocatore.getY()-c.getRaggio()));
		g.drawLine(Math.round(giocatore.getX()-c.getRaggio()),  Math.round(giocatore.getY()-c.getRaggio()-4), Math.round(giocatore.getX()-c.getRaggio()), Math.round(giocatore.getY()-c.getRaggio()));
		g.drawOval((int)xDraw-2,(int)yDraw-2 , 5, 5);
		g.drawOval(Math.round(giocatore.getX()-c.getRaggio()),Math.round(giocatore.getY()-c.getRaggio()),Math.round(2*c.getRaggio()),Math.round(2*c.getRaggio()));
		g.drawString(""+giocatore.getVita(), Math.round(giocatore.getX()-3),Math.round( giocatore.getY()+5));
		g.setColor(Color.GREEN);
		g.fillRect(Math.round(giocatore.getX()-c.getRaggio()-10),Math.round(giocatore.getY()-c.getRaggio()-4), giocatore.getEnergia()/100, 4);
	};
	
	/*
	 * I metodi Disegna Scudo, Disegna Energia, Disegna Dardo ...
	 * hanno una struttura simile.
	 * il Prof  
	 */
	public void disegnaGadget (Gadget gadget) {
		if(gadget.Attiva()){
			g.setColor(gadget.getForma().getColore());
			g.fillOval(Math.round(gadget.getX()-Gadget.RAGGIO_GADGET),Math.round(gadget.getY()-Gadget.RAGGIO_GADGET),
					Math.round(2*gadget.getForma().getRaggio()),  Math.round(2*gadget.getForma().getRaggio()));
		}
	}
	
	public void disegnaElementoCircolare (Elemento elemento) {
		g.setColor(elemento.getForma().getColore());
		g.fillOval(Math.round(elemento.getX()-elemento.getForma().getRaggio()),Math.round(elemento.getY()-elemento.getForma().getRaggio()), Math.round(2*elemento.getForma().getRaggio()), Math.round(2*elemento.getForma().getRaggio()));
	}
	
	
	private void disegnaElementi(){
		this.elementi = arena.getElementi();
		Iterator<Elemento> it = elementi.iterator();
		Elemento eit;
		
		while(it.hasNext()){
			eit = it.next();
			eit.disegnaElemento();	
		}
	}
	
	@Override
	protected void paintComponent(Graphics g) {
		this.g = g;
		super.paintComponent(g);
		disegnaElementi();
	}
		
	
	@Override
	public void update(){
		repaint();
	}

}
